// 声明需要广播的事件
let fns = new Map();

export class BroadCaster{
    constructor(){
        return this;
    }
    /**
     * 注册一个广播函数
     * @param key 
     * @param fn 
     * @returns 
     */
    addFn(key:string,fn:Function){
        if(!key||!fn) return false;
        fns.set(key,fn);
    }
    /**
     * 根据键值删除注销函数
     * @param key 
     * @returns 
     */
    cancelFn(key:string){
        if(!key) return false;
        fns.delete(key)
    }
    /**
     * 通知函数
     * @param key 值为null时，通知所有的方法，负责根据键查找
     * @param obj 对象/通知的内容
     * @returns 
     */
    RemindFn(key:string|null,obj:object){
        if(key){
            return fns.has(key) && fns.get(key)(obj)
        }
        let ens = fns.entries();
        for(let e of ens){
            e instanceof Function && e(obj)
        }
        return true;
    }
}